The development and updating of software programs typically involves multiple iterations of a number of sections of code. As a program develops and undergoes changes, several developers often modify sections of code multiple times. A program called the source control system maintains a repository, where the most current versions of the program are stored. A developer may “check out” a copy, called a working copy, and make alterations to the code. The developer must then merge the working copy with the repository copy in order to update the software. Additionally, multiple developers often work on the same file at the same time. This leads to multiple versions of a given file, each with different changes which may be incompatible with other developers' changes. In this case, developers must merge the multiple versions and test for bugs.
As the software changes, the developers must ensure that their modifications to the program have not resulted in the introduction of new software bugs, called regressions, to previously functioning software. Because of the high demands of consumers, minimizing regressions through multiple iterations of a software program is a crucial and expensive part of software development. Development and testing of complex software requires that detailed environment configurations be in place to deliver new candidate code. Often these environments consist of multiple machines that are costly and complex to setup and maintain.